package com.study.designPattern.factorymethod;

import com.utils.ClassUtils;

import java.util.List;
import java.util.Random;

public class HumanFactory extends AbstractHumanFactory {

    @Override
    public <T extends Human> T createHuman(Class<T> c) {

        //定义一个生产的人种
        Human human=null;
        try {
        //产生一个人种
            human = (T)Class.forName(c.getName()).newInstance();
//            return c.newInstance();
        } catch (Exception e) {
            System.out.println("人种生成错误！ ");
        }
        return (T)human;
    }

    /**
     * 随机产生一个人类
     *
     * @return
     */
    @Override
    public Human createHuman() {
        Human human=null; //定义一个类型的人类
        //首先是获得有多少个实现类，多少个人类
        List<Class> concreteHumanList =
                ClassUtils.getAllClassByInterface(Human.class); //定义了多少人类
        //八卦炉自己开始想烧出什么人就什么人
        Random random = new Random();
        int rand = random.nextInt(concreteHumanList.size());
        human = createHuman(concreteHumanList.get(rand));
        return human;
    }


}
